The new generation of UHF Satellite Communications Standards (MIL-STD-188-181C, MIL-STD-188-182B, and MIL-STD-188-183B) require (up to) 54 different modems to simultaneously reside in the SATCOM terminal. These standards include the DAMA/IW (demand-Assigned Multiple Access/Integrated Waveform) communications standards which are intended to increase existing satellite communications throughput by a factor of two. Designing the modems for the DAMA/IW standard requires new techniques to combine subfunctions of the modem to reduce software complexity and decrease development and integration time. Indeed, various satellite communication systems have limited program space, CPU computation speed, and battery power.
The use of Forward Error Correction (FEC) and the Maximum Likelihood Decoder (e.g. Viterbi Algorithm) is described exhaustively in most standard communications texts including “Digital Communications” by John G. Proakis. Continuous Phase Modulation is described in detail in books such as “Digital Phase Modulation” by Anderson, Aulin and Sundberg and “Digital Communications” by John G. Proakis.
In digital communications systems such as cellular and PCS (personal communications systems), computer communications systems, and SATCOM (satellite communications) systems, digital data is modulated by a modem onto a signal to be transmitted over a communications channel. Data is typically encoded before transmission to a receiver or to a storage device, to protect the data from errors which may result from a noisy communications channel or a defect in the storage medium. An encoder manipulates data symbols in accordance with an error correction code and produces error correction symbols or a structured redundancy output sequence. When the code word is later received or retrieved it is decoded to reproduce the data symbols, and errors in the data symbols are corrected, if possible, using the error correction symbols or the structured redundancy of code.
For the following discussion, a convolutional codeword is defined as the n output bits that are generated based on an input of k input bits (i.e. rate k/n code). One method of decoding code words encoded using a convolutional code is commonly referred to as maximum likelihood decoding. One kind of maximum likelihood decoder is commonly referred to as a Viterbi decoder. Conceptually, a Viterbi decoder uses a decoding trellis, which has a branch for each possible code word and connected paths of branches for each possible stream, or sequence, of code words. The decoder essentially finds a path through the trellis which is “closest” to, or most like, the received stream of code words. It then treats the code words on this “most likely” trellis path as the received code words and assigns data values to them, to produce a best estimate of the transmitted data.
To determine the most likely path, the decoder calculates, for each received code word, a set of branch metrics. A branch metric is a numerical representation of the likelihood that the transmitted code word, which may contain errors on reception, is actually the code word which corresponds to a particular branch. In one such decoder the branch metrics are the Hamming distances between the received code word and the code words associated with the various branches.
Each branch in the decoding trellis leads from an initial state, which represents the state that the registers are in prior to the formulation of the code word associated with the branch, and leads to an end state, which represents the state that the registers are in after the formulation of the code word. For a binary code there are 2K−1 possible states associated with each decoding level, where K is the constraint length of the code. For example, the code may have a constraint length of 3, i.e., there are 2 registers, and there are thus 4 possible register states, namely, 00, 01, 10, 11, in each decoding level. For a rate 1/n code, there are two possible branches leading from each initial state, namely a branch associated with a zero data bit and a branch associated with a one data bit. Each of these branches necessarily leads to a different end state. Thus for each of the 2K−1 states in a given decoding level, there are two branches leading to each of these states, and each branch may represent the transmitted code word. Accordingly, to decode the code word the decoder must determine two branch metrics for each of the 2K−1 possible end states, or a total of 2(2K−1) branch metrics.
Once the decoder calculates these branch metrics, it next determines the metrics of the various paths leading to the end states. Accordingly, the decoder adds to the branch metrics the appropriate path metrics, which are the sums of the branches leading to the initial states. The decoder then selects a most likely path leading to each of the end states and stores for later use the path metrics and information which identifies these most likely paths. These most likely paths which are also referred to as the “surviving paths.” The decoder does not retain information relating to the less likely, or non-surviving, paths. In this way, the decoder “prunes” these paths from the trellis, and thereby eliminates for a next level of decoding a portion of the path metric calculations.
When a sufficient number of code words have been included in the trellis paths, the most likely code word path is chosen from the surviving paths associated with the end states. The decoder selects as the most likely path the code word path which is “closest” to the received data, i.e., the path with the smallest Hamming distance metric. The decoder then decodes the code words on the most likely path, or “traces back” along the path, to determine the associated data bits.
The Viterbi algorithm is used not only to decode convolutional codes but also to produce the maximum-likelihood estimate of the transmitted sequence through a channel with intersymbol interference (ISI). The Viterbi decoder is divided into three functional parts. The first part is an add-compare-select (ACS) unit that is used to calculate the path metrics. The second one is the survivor memory control unit for survivor memory management. The survivor memory, used to store the survivor sequences, is the last part of the Viterbi decoder.
Continuous phase modulation (CPM) is being applied in communications due to its bandwidth efficiency and constant envelope characteristics. With CPM, the modulated signal phase transitions are smoothed. For example, with binary phase shift keying (BPSK) a logic one is transmitted as one phase of a modulated signal and a logic zero is transmitted as a 180-degree shifted phase with a sharp transition in phase. This sharp phase transition results in broadening of the transmitted spectrum. With CPM the phase of the transmitted signal makes smooth phase changes over the bits of the modulating digital signal. An example of CPM is minimum shift keying (MSK) modulation.
Multi-h continuous phase modulation (multi-h CPM) is itself a broad class of modulated waveforms. The class includes signals with constant amplitude but varying phase. Multi-h CPM differs from the single-h format by using a set of H modulation indices in a cyclic manner. This results in delayed merging of neighboring phase trellis paths and ultimately, in improved error performance. A detailed description of multi-h CPM waveforms, is included in the book “Digital Phase Modulation” by Anderson, Aulin, and Sundberg, Plenum Press, New York, 1986.
Xilinx, Inc. of San Jose, Calif. provides an FPGA Viterbi Decoder with parameterizable constraint length, convolutional codes and traceback length as described in the data sheet DS247 (v1.0) Mar. 28, 2003 from Xilinx, Inc. However, such FPGA Viterbi decoder is not programmable for use with CPM signals.
Forward Error Correction (FEC) codes are commonly used in the communication industry. Digital signal processing techniques used for the demodulation and decoding of the FEC codes is well known in the art. However, the combination of CPM (e.g. multi-h CPM) and the use of FEC codes requires a new programmable decoder. There exists a need in the industry for a generic trellis decoder which can be used to decode convolutional codes, trellis coded modulation waveforms, ISI channels, singles h and multi-h CPM, for example.